/*
 * encolarParaEscritura.c
 *
 *  Created on: 27/09/2011
 *      Author: JL
 */


#include "../../Commons/src/includes/BibliotecasGenerales.h"
#include "./includes/funcionesAlgoritmo.h"
#include "./includes/variablesGlobales.h"

//typedef struct nodoLista
//{
//	char ruta[256];
//	struct nodoLista *ptrSgte;
//}nodoLista_t;
//
//typedef nodoLista_t *ptrNodoLista;
//
//int encolarParaEscritura(ptrNodoLista ListaDiscos){
//	ptrNodoLista ptr;
//	ptr= ListaDiscos;
//	if (ptr == NULL){   // no hay ningun nodo cargado, no hay discos
//		printf("no hay discos");
//		return -1;
//	}
//	else {
//		while (ptr != NULL){
//		//se encola en la donde indica la ruta del registro ruta
//		ptr=ptr->ptrSgte;
//		}
//	printf("se recorrieron los discos");
//	return 0;
//	}
//}

uint32_t encolarParaEscritura(desc_PDD_t* desc_PDD, uint32_t cant_PDD, payloadEscritura_t payloadEscritura, uint32_t lonPay){

uint32_t i, lonMsj;
nodo_t nodo;

lonMsj = lonPay-sizeof(payloadEscritura.sector)-sizeof(payloadEscritura.socket);

nodo.flagRW = 1;
nodo.peticion = payloadEscritura.sector;
memcpy(&nodo.mensaje,payloadEscritura.contenido,512);
nodo.lonMsj = lonMsj;
nodo.socket=payloadEscritura.socket;

	if (cant_PDD == 0){   // no hay ningun disco
//		printf("no hay discos");
		return -1;
	}
	else {
		for(i=0;i<cant_PDD;i++){
	//	printf("Se encola en el disco %d",i); //Mandas peticion al hilo
		agregar(&desc_PDD[i].colaFte,&desc_PDD[i].colaFin,nodo);
//		tomarPeticion(&desc_PDD[i]);
		}
		if(flagConsola==1){
	printf("Se hace un write en todos los discos\n");
		};
	return 0;
	}
}

uint32_t encolarParaEscrituraSincro(desc_PDD_t* noUsa, uint32_t cant_PDD, payloadEscritura_t payloadEscritura, uint32_t lonPay, uint32_t discoSincro){

uint32_t lonMsj;
nodo_t nodo;

lonMsj = lonPay-sizeof(payloadEscritura.sector);

nodo.flagRW = 2;
nodo.peticion = payloadEscritura.sector;
memcpy(&nodo.mensaje,payloadEscritura.contenido,lonMsj);
nodo.lonMsj = lonMsj;


	//puts("se encola ecritura sincro");
	//printf("Se encola en el disco %d",discoSincro); //Mandas peticion al hilo
		agregar(&desc_PDD[discoSincro].colaFte,&desc_PDD[discoSincro].colaFin,nodo);
//		tomarPeticion(&desc_PDD[i]);

//	printf("Se encoló en todos los discos para escritura");
	return 0;
}
